﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.model.Instance;
using l1cs.server.serverpackets;
using l1cs.server.model;

namespace l1cs.server.clientpackets
{
    public class C_ChatParty : ClientBasePacket
    {
        private const String _C_CHAT_PARTY = "[C] C_ChatParty";
        private static Logger _log = Logger.getLogger( typeof( C_ChatParty ).FullName );

        public C_ChatParty( byte[] abyte0, ClientThread clientthread )
            : base( abyte0 )
        {

            L1PcInstance pc = clientthread.getActiveChar();
            if ( pc.isGhost() )
            {
                return;
            }

            int type = readC();
            if ( type == 0 )
            { // /chatbanishコマンド
                String name = readS();

                if ( !pc.isInChatParty() )
                {
                    // パーティーに加入していません。
                    pc.sendPackets( new S_ServerMessage( 425 ) );
                    return;
                }
                if ( !pc.getChatParty().isLeader( pc ) )
                {
                    // パーティーのリーダーのみが追放できます。
                    pc.sendPackets( new S_ServerMessage( 427 ) );
                    return;
                }
                L1PcInstance targetPc = L1World.getInstance().getPlayer( name );
                if ( targetPc == null )
                {
                    // %0という名前の人はいません。
                    pc.sendPackets( new S_ServerMessage( 109 ) );
                    return;
                }
                if ( pc.getId() == targetPc.getId() )
                {
                    return;
                }

                foreach ( L1PcInstance member in pc.getChatParty().getMembers() )
                {
                    if ( string.Compare( member.getName(), name, true ) == 0 )
                    {
                        pc.getChatParty().kickMember( member );
                        return;
                    }
                }
                // 見つからなかった
                // %0はパーティーメンバーではありません。
                pc.sendPackets( new S_ServerMessage( 426, name ) );
            }
            else if ( type == 1 )
            { // /chatoutpartyコマンド
                if ( pc.isInChatParty() )
                {
                    pc.getChatParty().leaveMember( pc );
                }
            }
            else if ( type == 2 )
            { // /chatpartyコマンド
                L1ChatParty chatParty = pc.getChatParty();
                if ( pc.isInChatParty() )
                {
                    pc.sendPackets( new S_Party( "party", pc.getId(), chatParty
                            .getLeader().getName(), chatParty
                            .getMembersNameList() ) );
                }
                else
                {
                    pc.sendPackets( new S_ServerMessage( 425 ) ); // パーティーに加入していません。
                    // pc.sendPackets(new S_Party("party", pc.getId()));
                }
            }
        }

        override
        public String getType()
        {
            return _C_CHAT_PARTY;
        }
    }
}